﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DataTypes;

namespace Persistencia
{
    public class PersistenciaProveedores
    {
        public void AltaProveedor(DataProveedor dataProveedor)
        {            
            string nombre = dataProveedor.Nombre;
            string rut = dataProveedor.Rut;
            string direccion = dataProveedor.Direccion;
            int telefono = dataProveedor.Telefono;
            
            AccesoBD accesoBD = new AccesoBD();
            
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD(); 
            string consulta = "INSERT INTO Proveedores (nombre, rut, direccion,telefono) VALUES ('" + nombre + "','" + rut + "','" + direccion + "'," + telefono + ");";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public void ModificarDatosProveedor(DataProveedor dataProveedor, string rut)
        {
            int idProveedor = ObtenerIdProveedor(rut);

            string nombre = dataProveedor.Nombre;
            string rrut = dataProveedor.Rut;
            string direccion = dataProveedor.Direccion;
            int telefono = dataProveedor.Telefono;

            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            string consulta = "UPDATE Proveedores SET nombre = '" + nombre + "', rut = '" + rrut + "', direccion = '" + direccion + "', telefono = " + telefono + " where idProveedor = " + idProveedor + ";";
            
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection); 
        }

        public void EliminarProveedor(string rut)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            string consulta = "DELETE FROM Proveedores WHERE rut = '" + rut + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            //Ejecucion del comando en el servidor de BD
            myCommand.ExecuteNonQuery();
            accesoBD.DesconectarBD(myConnection);
        }

        public DataProveedor ObtenerDataProveedor(string rut)
        {
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "SELECT nombre, rut, direccion, telefono FROM Proveedores WHERE rut = '" + rut + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
            string nombre = "";
            string direccion = "";
            int telefono = 0;

            while (objReader.Read())
            {
                nombre = Convert.ToString(objReader["nombre"]);
                direccion = Convert.ToString(objReader["direccion"]);
                telefono = Convert.ToInt32(objReader["telefono"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            DataProveedor proveedor = new DataProveedor(nombre, rut, direccion, telefono);
            return proveedor;
        }

        public bool ExisteDataProveedor(string rut)
        {
            bool existe = false;
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            string consulta = "SELECT * FROM Proveedores WHERE rut = '" + rut + "';";
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            while (objReader.Read() && !existe)
            {
                existe = objReader != null;
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return existe;
        }

        public List<DataProveedor> ListarProveedores()
        {
            string nombre = "";
            string rut = "";
            string direccion = "";
            int telefono = 0;
            List<DataProveedor> listaProveedores = new List<DataProveedor>();
            string consulta = "SELECT nombre, rut, direccion, telefono FROM Proveedores;";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();
            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();

            while (objReader.Read())
            {
                nombre = Convert.ToString(objReader["nombre"]);
                rut = Convert.ToString(objReader["rut"]);
                telefono = Convert.ToInt32(objReader["telefono"]);
                direccion = Convert.ToString(objReader["direccion"]);
                DataProveedor proveedor = new DataProveedor(nombre, rut, direccion, telefono);
                listaProveedores.Add(proveedor);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return listaProveedores;
        }


        /// -- M E T O S   A U X I L I A R E S
        public int ObtenerIdProveedor(string rut)
        {
            int idProveedor = 0;
            string consulta = "SELECT idProveedor FROM Proveedores WHERE rut = '" + rut + "';";
            AccesoBD accesoBD = new AccesoBD();
            //Creo un objeto Command.
            SqlConnection myConnection = accesoBD.ConectarBD();

            SqlCommand myCommand = new SqlCommand(consulta, myConnection);
            SqlDataReader objReader = myCommand.ExecuteReader();
            while (objReader.Read())
            {
                idProveedor = Convert.ToInt32(objReader["idProveedor"]);
            }
            objReader.Close();
            accesoBD.DesconectarBD(myConnection);
            return idProveedor;
        }
    }
}